Ignore file locks on OSX NFS mounts
authorAlex Crichton <alex@alexcrichton.com>
Thu, 19 May 2016 19:09:00 +0000 (12:09 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Sun, 12 Jun 2016 15:18:30 +0000 (08:18 -0700)
We already ignore NFS on Linux so let's do the same on OSX as well.

src/cargo/util/flock.rs

index 9f6a5352a197b8c7d7a14c03d2c1b77a679e74d6..cccdd4aad87171bdbe335762e3f72aa45d457952 100644 (file)
@@ -5,6 +5,8 @@ use std::path::{Path, PathBuf, Display};
 
 use term::color::CYAN;
 use fs2::{FileExt, lock_contended_error};
+#[allow(unused_imports)]
+use libc;
 
 use util::{CargoResult, ChainError, Config, human};
 
@@ -267,6 +269,13 @@ fn acquire(config: &Config,
 
     match try() {
         Ok(()) => return Ok(()),
+
+        // Like above, where we ignore file locking on NFS mounts on Linux, we
+        // do the same on OSX here. Note that ENOTSUP is an OSX_specific
+        // constant.
+        #[cfg(target_os = "macos")]
+        Err(ref e) if e.raw_os_error() == Some(libc::ENOTSUP) => return Ok(()),
+
         Err(e) => {
             if e.raw_os_error() != lock_contended_error().raw_os_error() {
                 return Err(human(e)).chain_error(|| {
@@ -287,7 +296,6 @@ fn acquire(config: &Config,
         use std::ffi::CString;
         use std::mem;
         use std::os::unix::prelude::*;
-        use libc;
 
         let path = match CString::new(path.as_os_str().as_bytes()) {
             Ok(path) => path,